#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# standard modules
import logging
import os
import string
import sys
import socket
import struct
import sys
from socket import error

from metasploit import module

metadata = {
	'name': 'CVE-2020-0796',
	'description': '''
    	Scanner for CVE-2020-0796 by Julixsalas.
	''',
	'authors': [
    	'julixsalas'
	],
	'date': '2020-03-15',
	'license': 'MSF_LICENSE',
	'references': [
	],
	'type': 'single_scanner',
	'options': {
    	'rhost': {'type': 'address', 'description': 'Target address', 'required': True, 'default': None}
	}
}


def run(args):
	try:
		sock = socket.socket(socket.AF_INET)
		sock.settimeout(3)
		ip = args['rhost']
		sock.connect(( str(ip).strip(),  445 ))
		payload = b'\x00\x00\x00\xc0\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x08\x00\x01\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x02\x00\x00\x00\x02\x02\x10\x02"\x02$\x02\x00\x03\x02\x03\x10\x03\x11\x03\x00\x00\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\n\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00'
		sock.send(payload)
		nb, = struct.unpack(">I", sock.recv(4))
		res = sock.recv(nb)
		if res[68:70] == b"\x11\x03" or res[70:72] == b"\x02\x00":
			module.log('{} - {}'.format(ip,'Vulnerable'), level='good')
	except error as exc:
		module.log('{} - {}'.format(ip, 'No Vulnerable'), level='error')
		pass
		
if __name__ == '__main__':
	module.run(metadata, run)